package com.zbkj.service.monitor;

import cn.hutool.json.JSONObject;
import com.alibaba.fastjson.JSONArray;
import com.zbkj.common.monitorchannel.GetDeviceModelV3Request;
import com.zbkj.common.monitorchannel.GetMultiMediaAddrV3Request;
import com.zbkj.common.monitorchannel.GetMultiMediaAddrV3Response;
import com.zbkj.common.monitorchannel.GetMultiMediaRecordV3Request;
import com.zbkj.common.monitorchannel.enums.MonitorChannelEnums;
import com.zbkj.common.monitorchannel.vo.*;

public interface IMonitorChannel {


    /**
     * 查询流媒体地址
     *
     * @param license
     */
    MonitorChannelMediaAddressVo getMediaAddress(String license);

    /**
     * 唤醒设备
     *
     * @param license
     */
    boolean wakeUpEquipment(String license);


    /**
     * 获取设备状态
     *
     * @param license
     * @return
     */
    MonitorChannelEquipmentStatusVo getEquipmentStatus(String license);


    /**
     * ptz控制
     *
     * @param ctrlPTZRequestVo
     * @return
     */
    boolean ctrlPTZ(CtrlPTZRequestVo ctrlPTZRequestVo);


    /**
     * 通过该命令向设备设置时间信息
     *
     * @param setTimeRequestVo
     * @returnD
     */
    boolean setTime(MonitorSetTimeRequestVo setTimeRequestVo);


    MonitorChannelEnums getChannel();


    /**
     * 通知设备进⾏行行物理理变焦
     * 鹤梦云-2.6.2.8.6 通知设备进⾏行行物理理变焦
     *
     * @param requestVo
     * @return
     */
    ThirdMonitorResultVo setAdjustFocalLength(AdjustFocalLengthRequestVo requestVo);


    /**
     * 通知设备抓图
     * 鹤梦云-4.6.2.2.8 通知设备抓图
     *
     * @param requestVo
     * @return
     */
    ThirdMonitorResultVo noticeDeviceUploadPicRequest(NoticeDeviceUploadPicRequestVo requestVo);


    /**
     * 查询设备云端录像⽇日历
     * 鹤梦云-4.6.2.3.1 查询设备云端录像⽇日历
     *
     * @param requestVo
     * @return
     */
    ThirdMonitorResultVo<VideoQueryCalendarResultVo> getVideoQueryCalendar(VideoQueryCalendarRequestVo requestVo);


    /**
     * 查询设备云端录像列列表
     * 鹤梦云-4.6.2.3.2 查询设备云端录像列列表
     *
     * @param requestVo
     * @return
     */
    ThirdMonitorResultVo<VideoQueryListResultVo> getVideoQueryList(VideoQueryListRequestVo requestVo);

    /**
     * 查询设备云端录像详情
     * 鹤梦云-4.6.2.3.3 查询设备云端录像详情
     *
     * @param requestVo
     * @return
     */
    ThirdMonitorResultVo<VideoQueryDetailResultVo> getVideoQueryDetail(VideoQueryDetailRequestVo requestVo);


    /**
     * 查询设备云端图⽚片列列表
     * 鹤梦云-4.6.2.2.2 查询设备云端图⽚片列列表
     *
     * @param requestVo
     * @return
     */
    ThirdMonitorResultVo<PictureQueryListResultVo> getPictureQueryList(VideoQueryListRequestVo requestVo);


    /**
     * 查询设备云端图⽚片详情
     * 鹤梦云-4.6.2.2.3 查询设备云端图⽚片详情
     *
     * @param requestVo
     * @return
     */
    ThirdMonitorResultVo<PictureQueryDetailResultVo> getPictureQueryDetail(PictureQueryDetailRequestVo requestVo);


    /**
     * 查询设备云端图⽚片详情
     * 鹤梦云-4.6.2.2.7 查询设备本地图⽚片列列表(须设备在线才可查询)
     *
     * @param requestVo
     * @return
     */
    ThirdMonitorResultVo<GetLocalPicListResultVo> getGetLocalPicList(VideoQueryListRequestVo requestVo);


    /**
     * 查询设备本地录像列列表
     * 鹤梦云-4.6.2.3.5 查询设备本地录像列列表
     *
     * @param requestVo
     * @return
     */
    ThirdMonitorResultVo<GetLocalFileListResultVo> getLocalFileList(GetLocalFileListRequestVo requestVo);


    /**
     * 鹤梦云-4.6.2.2.5 根据事件时间查询设备云端图⽚片详情
     */
    ThirdMonitorResultVo<PictureQueryDetailByTimeResultVo> QueryDetailByTime(QueryDetailByTimeRequestVo requestVo);


    /**
     * 4.5.1 根据产品ID进⾏行行订阅数据
     *
     * @param requestVo
     * @return
     */
    ThirdMonitorResultVo subscribe(MonitorSubscribeRequestVo requestVo);

    /**
     * 4.6.2.6.3 摄像头开关
     *
     * @param requestVo
     * @return
     */
    ThirdMonitorResultVo setOpenFlag(MonitorSetOpenFlagVo requestVo);

    /**
     * 4.6.2.3.4 查询设备本地录像⽇日历
     *
     * @param requestVo
     * @return
     */
    ThirdMonitorResultVo getLocalFileCalendar(GetLocalFileCalendarVo requestVo);


    /**
     * 获取v3版本的 accessToken
     *
     * @return
     */
    String getV3AccessToken();


    /**
     * 5.5.8.2 获取 TF 录像回放地址标准流地址
     * 功能说明：
     * 1、获取设备流媒体录像回放地址；
     * 2、请求路径 url: /GMModule/V3/Media/GetMultiMediaRecordAddr；
     *
     * @param requestVo
     * @return
     */
    GetMultiMediaRecordAddrV3Response GetMultiMediaRecordAddr(GetMultiMediaRecordAddrV3Request requestVo);


    /**
     * 5.5.3.2 查询 TF 卡录像列表
     * 功能说明：
     * 1、按照日期查询 TF 卡录像列表；
     * 2、请求 URL；/GMModule/V3/Device/GetLocalFileList；
     *
     * @param requestVo
     * @return
     */
    GetLocalFileListV3Response GetLocalFileList(GetLocalFileListV3Request requestVo);


    /**
     * 5.5.3.3 查询 TF 卡事件日历
     * 功能说明：
     * 1、查询 TF 卡那天存在报警事件；
     * 2、请求 URL；/GMModule/V3/Device/GetLocalEventCalendar
     *
     * @param requestVo
     * @return
     */
    GetLocalEventCalendarV3Response GetLocalEventCalendar(GetLocalEventCalendarV3Request requestVo);


    /**
     * 5.2.2 用户账号添加/删除设备
     * 功能说明：
     * 1、用户添加或者删除设备；
     * 2、该接口影响用户对设备的所有操作;
     * 3、请求路径 url: /GMModule/SetDevices;
     *
     * @param requestVo
     * @return
     */
    SetDevicesV3Response SetDevices(SetDevicesV3Request requestVo);


    /**
     * 5.5.1.1 查询设备的业务配置
     * 功能说明：
     * 1、根据功能模块类型查询设备的配置和能力；
     * 2、请求 URL；/GMModule/V3/Device/GetDeviceModel;
     *
     * @param requestVo
     * @return
     */
    JSONObject GetDeviceModel(GetDeviceModelV3Request requestVo);


    /**
     * 5.5.8.1 获取直播播放地址
     * 功能说明：
     * 1、获取设备流媒体直播地址；
     * 2、请求路径 url: /GMModule/V3/Media/GetMultiMediaAddr；
     *
     * @param requestVo
     * @return
     */
    GetMultiMediaAddrV3Response GetMultiMediaAddr(GetMultiMediaAddrV3Request requestVo);


    /**
     * 5.5.8.2获取TF录像回放地址标准流地址
     * 1、获取设备流媒体录像回放地址；
     * 2、请求路径url:/GMModule/V3/Media/GetMultiMediaRecordAddr；
     *
     * @param request
     * @return
     */
    GetMultiMediaAddrV3Response GetMultiMediaRecordV3Request(GetMultiMediaRecordV3Request request);


    /**
     * 5.5.4.7 摄像机开关
     * 功能说明：
     * 1、关闭摄像机后，停止所有录制，同时app默认不可以观看，同时镜头转向隐私位；
     * 2、请求URL；/GMModule/V3/Device/SetOpenFlag
     *
     * @param requestVo
     * @return
     */
    JSONObject v3SetOpenFlag(MonitorSetOpenFlagVo requestVo);
    /**
     * 5.5.4.2 重启设备
     * 功能说明：
     * 1、重启设备；
     * 2、请求URL；/GMModule/V3/Device/RebootDevice
     *
     * @param requestVo
     * @return
     */
    JSONObject v3RebootDevice(MonitorRebootDeviceVo requestVo);


    /**
     * 5.5.4.3 检测设备版本是否可升级
     * 功能说明：
     * 1、后台比较设备当前版本号与后台版本号，当后台版本呢大于当前版本，则可升级；
     * 比较方式：strcmp("当前版本号","后台版本号") > 0 ；
     * 2、请求 URL；；/GMModule/V3/Device/CheckDeviceUpgradeVersion
     *
     * @param requestVo
     * @return
     */
    JSONObject v3CheckDeviceUpgradeVersion(MonitorBaseVo requestVo);


    /**
     * 5.5.4.4 通知设备升级到最新版本
     * 功能说明：
     * 1、当检测设备有新版后，通知设备进行 OTA；
     * 2、请求 URL；/GMModule/V3/Device/NoticeUpgradeDeviceToLatestVersion
     *
     * @param requestVo
     * @return
     */
    JSONObject v3NoticeUpgradeDeviceToLatestVersion(MonitorBaseVo requestVo);


    /**
     * 5.5.4.17 获取 TF 卡信息
     * 功能说明：
     * 1、查询 TF 卡的容量信息；
     * 2、请求 URL；/GMModule/V3/Device/GetSDCardInfo
     *
     * @param requestVo
     * @returnF
     */
    MonitorGetSDCardInfoResultVo v3GetSDCardInfo(MonitorBaseVo requestVo);

    /**
     * 5.5.4.18 格式化 TF 卡
     * 功能说明：
     * 1、格式话设备 TF 卡，TF 卡数据将会全部丢失；
     * 2、请求 URL；/GMModule/V3/Device/FormatSDCard
     *
     * @param requestVo
     * @return
     */
    JSONObject v3FormatSDCard(MonitorBaseVo requestVo);
    /**
     * 5.5.4.19 设置设备名称
     * 功能说明：
     * 1、修改设备的名称；
     * 2、请求 URL；/GMModule/V3/Device/SetDeviceName
     *
     * @param requestVo
     * @return
     */
    JSONObject v3SetDeviceName(MonitorSetDeviceNameVo requestVo);

    /**
     * 5.5.4.26 控制设备进行放大和缩小
     * 功能说明：
     * 1、当设备具有变焦能力的时候，通过该接口通知设备变焦，可以是电子变焦或光学变
     * 焦；
     * 2、请求 URL；/GMModule/V3/Device/AdjustFocalLength
     *
     * @param requestVo
     * @return
     */
    JSONObject v3AdjustFocalLength(MonitorAdjustFocalLengthVo requestVo);


    /**
     * 5.5.4.27 设置电池工作模式
     * 功能说明：
     * 1、设置电池摄像机的工作模式，前提是设备支持工作模式切换；
     * 2、请求 URL；/GMModule/V3/Device/SetBatteryWorkMode
     *
     * @param requestVo
     * @return
     */
    JSONObject v3SetBatteryWorkMode(MonitorSetBatteryWorkModeVo requestVo);
}
